﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
using AGPR.Locadora.Utils;

namespace AGPR.Locadora.Model
{
    /// <summary>
    /// Classe Abstrata que contém as informações comuns de Pessoas
    /// </summary>
    public abstract class Pessoa : IPessoa
    {
        #region Atributos

        /// <summary>
        /// Nome da Pessoa
        /// </summary>
        [Required]
        [StringLength(65, MinimumLength = 2)]
        [Display(Name = "Nome")]
        public string nome { get; set; }

        /// <summary>
        /// CPF da Pessoa
        /// </summary>
        [Required]
        [StringLength(11)]
        [Display(Name = "CPF")]
        public string cpf { get; set; }

        public string cpfMascara
        {
            get
            {
                return Format.formatarCPF(this.cpf);
            }
        }

        /// <summary>
        /// Email da Pessoa
        /// </summary>
        [Display(Name = "Email")]
        public string email { get; set; }

        /// <summary>
        /// Sexo da Pessoa
        /// </summary>
        [Required]
        [StringLength(1)]
        [Display(Name = "Sexo")]
        public string sexo { get; set; }

        /// <summary>
        /// Sexo da Pessoa Formatado
        /// </summary>
        public string sexoFull
        {
            get
            {
                return this.sexo == "M" ? "Masculino" : "Feminino";
            }
        }

        /// <summary>
        /// Data de Nascimento da Pessoa
        /// </summary>
        [Display(Name = "Data de Nascimento")]
        public string data_nascimento { get; set; }

        /// <summary>
        /// Endereço do Cliente
        /// </summary>        
        public Endereco endereco { get; set; }

        /// <summary>
        /// Váriavel auxiliar de endereço
        /// </summary>
        private int _id_endereco;

        /// <summary>
        /// Código do Endereço
        /// </summary>
        [Required]
        [Display(Name = "Endereço")]
        public int id_endereco
        {
            get
            {
                return this._id_endereco;
            }
            set
            {
                this.endereco = Endereco.Get(value); // Instancia o endereço
                this._id_endereco = this.endereco.id; // Salva ID
            }
        }

        /// <summary>
        /// Cliente Ativo
        /// </summary>
        [Display(Name = "Ativo")]
        public bool ativo { get; set; }

        /// <summary>
        /// Status que vem de um checkbox
        /// </summary>
        public object ativoCheckbox
        {
            get
            {
                return Convert.ToString(this.ativo);
            }
            set
            {
                this.ativo = Format.toBoolean(value);
            }
        }

        #endregion
    }
}
